home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Spanish Scene 1
/
SpanishScene1.iso
/
spanish pack n°1 by llfb
/
revistas
/
fanzine
/
fanzine01.dms
/
fanzine01.adf
/
37
< prev
next >
Wrap
Text File
|
1977-12-31
|
11KB
|
245 lines
__________________________________________________________________________
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
INICIACION A LA PROGRAMACION EN ENSAMBLADOR PARA EL AMIGA
__________________________________________________________________________
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
(c) Warlord
Con este curso, pretendemos iniciar a todas aquellas personas que aún no
lo han hecho, en la programación del 68000. Para ello empezaremos, expli-
cando desde un nivel básico, todos los conceptos y comandos del 68000.
Para no hacer este curso interminable no nos detendremos en temas tales
como la aritmética binaria,algebra de Boole o conceptos informáticos ele-
mentales:CPU,RAM,...,todos estos conceptos podéis hallarlos en cualquier
buen libro de informática general.
EL INTERIOR DEL AMIGA:
---------------------
CUSTOM CHIPS: Son los llamados Agnus,Denise y Paula.La principal tarea del
Agnus, (alias blitter) es el movimiento de areas de memoria, útiles para
tareas tales como cambios de pantallas. El Denise está relacionado con las
transferencias a pantalla y por último, el Paula se ocupa de tareas de en-
trada y salida.
MEMORIA:La memoria RAM puede ser dividida en dos zonas:
CHIP RAM:Es la memoria directamente accesible por los chips del Amiga.Suele
ser un banco de 512k (aunque con ligeros cambios, el 1.3 puede soportar
hasta 1 Mg,y el 2.0 ya soporta hasta 2 Mgs). Su situación es desde la posi-
ción $000000 hasta la $07FFFF (o bien 0 a 524287,pues 512x1024=524287 bytes)
FAST RAM:El resto de la memoria. Comienza en la $200000.
Este es el esquema de la memoria del amiga:
$000000 - $07FFFF Chip ram
$080000 - $1FFFFF Reservada
$200000 - $9FFFFF Fast Ram
$A00000 - $BEFFFF Reservada
$BFD000 - $BFDF00 PIA B (direcciones pares)
$BFE001 - $BFEF00 PIA C (direcciones impares)
$C00000 - $CFEFFF Reservada para expansiones
$DFF000 - $DFFFFF Registros de los Custom Chips
$E00000 - $E7FFFF Reservada
$E80000 - $EFFFFF Puertos de expansión
$F00000 - $F7FFFF Reservada
$F80000 - $FFFFFF Rom
REGISTROS:
¿Que es un registro?: Digamos que un registro es una pequeña porción de
memoria en la que podéis ir metiendo y sacando datos instantáneamente.
Generalmente estas zonas son de 32 bits,aunque como veremos hay alguno de
16.
-Registros de Datos:Hay 8,denotados por d0,d1,...d7 (32 bits)
-Registros de direcciones:otros 8:a0,....a7 (32 bits)
-Punteros de pila:Hay dos:USP (puntero de pila del usuario) y el SSP (punte-
ro de pila del supervisor). Puesto que en cada instante sólo uno de ellos
está activo ,a ambos se les denota por A7, pero recuerda que hay dos
punteros distintos aunque compartan la misma dirección.Es un registro de 32
bits
-Contador del programa,PC,de 32 bits. Guarda la posición de memoria en la
que el programa se encuentra ejecutándose.
-Registro de estado:Es importantísimo,y aparecerá numerosas veces a lo
largo de este curso.Es de 16 bits.El byte inferior (bits 0-7) guardan el
CCR,y el superior el llamado byte del sistema.
El CCR dispone de 5 indicadores:
BIT: 7 6 5 4 3 2 1 0
-------------------------------------
INDICADOR: X N Z V C
C:Bit de acarreo.En ocasiones al hacer alguna operación,nos quedan cortos
los 32 bits.Por ejemplo 2 elevado a 32 sería 1 uno seguido de 32 ceros,por
lo que necesitaríamos 33 bits para guardarlo,pues en uno de 32 bits,serían
todos ceros.Para ellos contamos con este bit de acarreo que podemos
utilizar eventualmente para hacer operaciones de 33 bits.
X:Bit de extensión.Disponemos de 8 registros de datos,pero sólo 1 de aca-
rreo.A veces nos haría falta utilizar varios bits de acarreos.Esto no es
posible,sin embargo en este caso el bit de extensión nos puede ayudar.Este
bit X es una especie de memoria del C.Hay muchas operaciones durante las
cuales el bit C se pierde,esto no ocurre así con el X.
N:Bit de signo.Es 0 para los positivos y uno para los negativos.Recordemos
que los números negativos tienen su bit 31 con un 1,mientras los positivos
tienen un cero.
Z:Se pondrá a uno si el resultado de la última operación ha sido cero,o en
caso contrario se pondrá a uno.
V:Rebose.Sirve para evitar errores en la aritmética con signo.En la aritmé-
tica con signo, los números tienen un rango menor,que la de sin signo. Sin
querer podemos cometer un error. Por ejemplo,con 4 bits,el rango sería de
0-15 para la aritmética sin signo y de -7 a +8 para la de con signo. En es-
te último caso,no podríamos sumar +9 + (-3) pues +4 cae fuera de la aritmé-
tica con signo.Sin embargo, la operación ha sido completamente legal, (para
la aritmética sin signo) por lo que el bit C de acarreo no nos ha advertido
del error. Por lo tanto, si el indicador V ha sido puesto a una tras alguna
operación, significará que en la aritmética con signo ha habido un error.
El byte del sistema. Recordemos que es el byte más significativo del SR
(bits del 8 al 15 del SR). En el se almacenan datos relativos al funciona-
miento general del sistema.Puede ser leído por el usuario,pero no alterado
por él.(a no ser que se encuentre en un modo especial llamado supervisor).
Bits 9-10:Máscara de interrupciones:Fijan un nivel de prioridad (de 0-7)
para las interrupciones.
Bit 13:Indicador del estado de supervisor. El amiga puede trabajar en dos
estados diferentes:Usuario y supervisor. SS=1 significa modo supervisor o
usuario en caso contrario. En modo supervisor se tiene acceso a todos los
recursos del sistema.Por ejemplo los sistemas operativos trabajan en modo
supervisor,los programas en modo usuario.Más adelante se comprenderá el
significado exacto de estos indicadores.
Bit 15:Modo traza.(se explicará mas adelante).
CODIGOS DE TAMAÑOS DE LOS DATOS:
-------------------------------
De ahora en adelante,identificaremos por b a un byte (8 bits),w a un grupo
de 16 bits (palabra) y l a una doble palabra (32 bits).En adelante iremos
viendo instrucciones que operarán con datos de esta forma.La mayoría de
estas instrucciones pueden trabajar con los tres tipos de datos indistinta-
mente,por lo que sustituiremos las 3 por z.Así por ejemplo ADD.z significa
que está operando o con un byte,o con una palabra o con una doble palabra
indistintamente.
DOBLE PALABRA: 31 ..... 23 ..... 15 ..... 7 .... 0 (.L)
(32 Bits)
PALABRA: 15 ..... 7 .... 0 (.W)
(16 bits)
BYTE: 7 .... 0 (.B)
(8 bits)
DIRECCIONAMIENTO DE LA MEMORIA
------------------------------
¿Cómo accede el procesador a la memoria y cómo podemos nosotros utilizar-
la?
El acceso a la memoria se puede hacer de varios modos. Aquí nos detendre-
mos en el direccionamiento inmediato y absoluto.
Ej: La instrucción "move" significa mover. Si escribimos "move #2,d0
llevará 2 ($ -> en hexadecimal) al registro d0, con lo cual ahora d0=2
Sin embargo, move #1, $1023 llevará 1 a la posición de memoria $1023
(hexad.). Vemos que ésta última forma, se caracteriza por llevar un
número (se representa #n) a una determinada dirección. Es el llamado
direccionamiento INMEDIATO, pues el número y la dirección están fijos.
Otro modo de direccionamiento, es el ABSOLUTO. Veámoslo con un ejemplo:
MOVE.L $1000,D3
ADD.L $1004,D3
MOVE.L D3,$1008
Aquí no trabajamos con números fijos, sino con registros y direcciones
fijas de memoria (pero no son fijos los contenidos de las direcciones)
En la primera línea llevamos el contenido de la dirección 1000 al registro
D3. Así si en la dirección mil había un 5, ahora D3=5
En la 2a línea añadimos (ADD) al registro D3, el contenido de la dirección
$1004. Es decir, si en $1004 había un 8, ahora D3=5+8=13
por último salvamos el contenido de D3 en la posición de memoria $1008.
Ahora en $1008 hay un 13.
Notas:
- Como véis la diferencia fundamental es:
MOVE.L $1000,D0 ;Direccionamiento Absoluto.Llevamos el contenido de la
dirección $1000 al registro D3
MOVE.L #$1000,D0;Direccionamiento Directo. Llevamos el NUMERO (#) $1000 al
;registro D3. Ahora D3=$1000
- Hemos utilizado .L , esto quiere decir que hemos tratado con Dobles pala
bras.(32 bits). Por eso hemos ido saltando las direcciones de 4 en 4:
$1000,$1004,$1008... (4x8=32 bits).
- ¿Qué hubiera ocurrido si...
MOVE.L $1000,D3
ADD.L $1001,D3; ¡Cuidado!. De $1000 a $1001 hay un sólo bit, luego no
sería correcto.
Esto nos lleva a una regla importante: Las direcciones utilizadas para pala-
bras y dobles palabras deben ser siempre pares.
COMANDOS DEL 68000
------------------
* MOVE.x : Ya lo hemos visto anteriormente. Significa "mover" un dato desde
el operando origen al operando destino:
MOVE #1,A0 ;Llevará 1 al registro A0. Luego ahora A0=1
MOVE.B $1000,A0 ; En esta ocasión llevamos el byte que se encuentra en la
posición 1000 al registro A0
MOVE.L A0,D0 ;Lleva el contenido de los 4 bytes de A0 a D0.
* CLR.z <operando> : Viene del Inglés CLeaR (limpiar). Es decir, pone el
operando a cero. Algunos ejemplos:
CLR.B A0;pone el byte más bajo de A0 completamente a cero
CLR.W A0;idem pero con los dos bytes más bajos
CLR.L A0;pone los 32 bits de A0 como 0.
Es lógico que al utilizar esta instrucción, pone el indicador del CCR
correspondiente a Z (Zero) a 1.
* ADD : Significa añadir
Es similar al MOVE, sólo que en esta ocasión suma el operando origen al
destino. Es decir:
ADD.L D0,D1; Añade los 32 bits de D0 a D1. Si por ejemplo D1=1, D2=135,
ahora D1=136.
NOTA: De los comandos MOVE y ADD hay muchas variantes:MOVEQ, ADDI,... pero
éstas se explicarán conforme vayan saliendo.
* ORG : Simplemente, indica al ensamblador que se desea que las líneas que
vienen a continuación sean ensambladas y cargadas a partir de una deter-
minada posición. Por ejemplo:
ORG $7000 indica que ensamblaremos el programa y lo leeremos a partir de
la dirección $7000. Tened cuidado con utilizar direcciones absolutas. En
su momento se explicará por qué.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Por hoy, ya está bien. Perdón por los errores que pueda haber, que seguro
que los hay. Espero vuestras preguntas... ¡Hasta la próxima!